home *** CD-ROM | disk | FTP | other *** search
/ HTBasic 9.3 / HTBasic 9.3.iso / LgcyPlus / disk2 / STNGEDIT._ / STNGEDIT.
Encoding:
Text File  |  2001-03-02  |  6.4 KB  |  200 lines

  1. 10    ! ******************************************************************
  2. 20    ! Example: STRING Editor
  3. 30    !
  4. 40    ! This program demonstrates the use of the STRING widget as a text
  5. 50    ! editor when in MULTILINE mode.
  6. 60    !
  7. 70    ! This program does not do much error-checking. A practical program
  8. 80    ! should include more error-checking.
  9. 90    !
  10. 100   ! ******************************************************************
  11. 110   !
  12. 120   ! Variables Definitions:
  13. 130   !
  14. 140   !   S$:      General-purpose string
  15. 150   !   Search:  Text search string
  16. 160   !   F$:      File string
  17. 170   !   N:       General-purpose variable
  18. 180   !   Btn:     Returns button value from dialogs
  19. 190   !
  20. 200   DIM S$[256],Search$[256],F$[128]
  21. 210   INTEGER N,Btn
  22. 220   INTEGER Cursor,D(1:4)
  23. 230   !
  24. 240   ! Widget dimensions
  25. 250   !
  26. 260   INTEGER Pw,Ph,Px,Py,Iw,Ih,Sw,Sh,Sx,Sy
  27. 270   !
  28. 280   ! Variables for display scaling
  29. 290   !
  30. 300   INTEGER Dw,Dh
  31. 310   !
  32. 320   ! Get display size
  33. 330   !
  34. 340   GESCAPE CRT,3;D(*)
  35. 350   Dw=D(3)-D(1)
  36. 360   Dh=D(4)-D(2)
  37. 370   CLEAR SCREEN
  38. 380   !
  39. 390   Pw=Dw*.7              ! PANEL width
  40. 400   Ph=Dh*.7              ! PANEL height
  41. 410   Px=(Dw-Pw)/2          ! Center PANEL
  42. 420   Py=(Dh-Ph)/2
  43. 430   !
  44. 440   ! Create PANEL for STRING widget
  45. 450   !
  46. 460   ASSIGN @Main TO WIDGET "PANEL";SET ("VISIBLE":0)
  47. 470   CONTROL @Main;SET ("X":Px,"Y":Py,"WIDTH":Pw,"HEIGHT":Ph)
  48. 480   CONTROL @Main;SET ("TITLE":" Example: String Editor")
  49. 490   CONTROL @Main;SET ("RESIZABLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
  50. 500   CONTROL @Main;SET ("SYSTEM MENU":"Quit")
  51. 510   !
  52. 520   ! Build "File" menu
  53. 530   !
  54. 540   ASSIGN @File TO WIDGET "PULLDOWN MENU";PARENT @Main
  55. 550   CONTROL @File;SET ("LABEL":"File ")
  56. 560   !
  57. 570   ASSIGN @New TO WIDGET "MENU BUTTON";PARENT @File
  58. 580   CONTROL @New;SET ("LABEL":"New")
  59. 590   ASSIGN @Openfile TO WIDGET "MENU BUTTON";PARENT @File
  60. 600   CONTROL @Openfile;SET ("LABEL":"Open...")
  61. 610   ASSIGN @Savefile TO WIDGET "MENU BUTTON";PARENT @File
  62. 620   CONTROL @Savefile;SET ("LABEL":"Save")
  63. 630   ASSIGN @Merge TO WIDGET "MENU BUTTON";PARENT @File
  64. 640   CONTROL @Merge;SET ("LABEL":"Merge...")
  65. 650   !
  66. 660   ASSIGN @S1 TO WIDGET "MENU SEPARATOR";PARENT @File
  67. 670   !
  68. 680   ASSIGN @Quit TO WIDGET "MENU BUTTON";PARENT @File
  69. 690   CONTROL @Quit;SET ("LABEL":"Quit")
  70. 700   !
  71. 710   ! Build "Edit" menu
  72. 720   !
  73. 730   ASSIGN @Edit TO WIDGET "PULLDOWN MENU";PARENT @Main
  74. 740   CONTROL @Edit;SET ("LABEL":"Edit")
  75. 750   !
  76. 760   ASSIGN @Cut TO WIDGET "MENU BUTTON";PARENT @Edit
  77. 770   CONTROL @Cut;SET ("LABEL":"Cut")
  78. 780   ASSIGN @Copytext TO WIDGET "MENU BUTTON";PARENT @Edit
  79. 790   CONTROL @Copytext;SET ("LABEL":"Copy")
  80. 800   ASSIGN @Paste TO WIDGET "MENU BUTTON";PARENT @Edit
  81. 810   CONTROL @Paste;SET ("LABEL":"Paste")
  82. 820   ASSIGN @Replace TO WIDGET "MENU BUTTON";PARENT @Edit
  83. 830   CONTROL @Replace;SET ("LABEL":"Replace")
  84. 840   !
  85. 850   ASSIGN @S2 TO WIDGET "MENU SEPARATOR";PARENT @Edit
  86. 860   !
  87. 870   ASSIGN @Findline TO WIDGET "MENU BUTTON";PARENT @Edit
  88. 880   CONTROL @Findline;SET ("LABEL":"Line Number...")
  89. 890   ASSIGN @Findstr TO WIDGET "MENU BUTTON";PARENT @Edit
  90. 900   CONTROL @Findstr;SET ("LABEL":"String...")
  91. 910   !
  92. 920   ! Create and size STRING widget, set MULTILINE operation
  93. 930   !
  94. 940   ASSIGN @S TO WIDGET "STRING";PARENT @Main
  95. 950   STATUS @Main;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
  96. 960   CONTROL @S;SET ("X":0,"Y":0,"WIDTH":Iw,"HEIGHT":Ih)
  97. 970   CONTROL @S;SET ("MULTILINE":1,"SCROLLBARS":1)
  98. 980   !
  99. 990   ! Set events
  100. 1000  !
  101. 1010  ON ERROR GOSUB Errtrap
  102. 1020  !
  103. 1030  ON EVENT @New,"ACTIVATED" GOSUB Newtext
  104. 1040  ON EVENT @Openfile,"ACTIVATED" GOSUB Getfile
  105. 1050  ON EVENT @Savefile,"ACTIVATED" GOSUB Savefile
  106. 1060  ON EVENT @Merge,"ACTIVATED" GOSUB Mergetext
  107. 1070  ON EVENT @Cut,"ACTIVATED" GOSUB Cut
  108. 1080  ON EVENT @Copytext,"ACTIVATED" GOSUB Copytext
  109. 1090  ON EVENT @Paste,"ACTIVATED" GOSUB Paste
  110. 1100  ON EVENT @Replace,"ACTIVATED" GOSUB Replace
  111. 1110  ON EVENT @Findline,"ACTIVATED" GOSUB Findline
  112. 1120  ON EVENT @Findstr,"ACTIVATED" GOSUB Findstr
  113. 1130  !
  114. 1140  ON EVENT @Quit,"ACTIVATED" GOTO Finis
  115. 1150  ON EVENT @Main,"SYSTEM MENU" GOTO Finis
  116. 1160  !
  117. 1170  CONTROL @Main;SET ("VISIBLE":1)
  118. 1180  !
  119. 1190  ! Loop and wait for input
  120. 1200  !
  121. 1210  LOOP
  122. 1220    WAIT FOR EVENT
  123. 1230  END LOOP
  124. 1240  STOP
  125. 1250  !
  126. 1260  ! ******** End of Main Program **********************
  127. 1270  !
  128. 1280  ! Error handler -- it flag errors and then bypasses the
  129. 1290  ! incorrect statement.
  130. 1300  !
  131. 1310 Errtrap: !
  132. 1320  DIALOG "ERROR",ERRM$
  133. 1330  ERROR RETURN
  134. 1340  !
  135. 1350  ! ******** Edit Routines ***************************
  136. 1360  !
  137. 1370 Newtext: !
  138. 1380  STATUS @S;RETURN ("TEXT LENGTH":N)
  139. 1390  IF N>0 THEN
  140. 1400    DIALOG "QUESTION","Do you want to clear the text?",Btn
  141. 1410    IF Btn=0 THEN CONTROL @S;SET ("VALUE":"")
  142. 1420  END IF
  143. 1430  RETURN
  144. 1440  !
  145. 1450 Getfile: !
  146. 1460  DIALOG "FILE","File to edit?",Btn;RETURN ("SELECTION":F$)
  147. 1470  IF Btn=0 THEN CONTROL @S;SET ("VALUE":"","READ FILE":FNValid_name$(F$))
  148. 1480  RETURN
  149. 1490  !
  150. 1500 Savefile: !
  151. 1510  DIALOG "FILE","Write to file?",Btn;RETURN ("SELECTION":F$)
  152. 1520  IF Btn=0 THEN CONTROL @S;SET ("WRITE FILE":FNValid_name$(F$))
  153. 1530  RETURN
  154. 1540  !
  155. 1550 Mergetext: !
  156. 1560  DIALOG "FILE","File to merge?",Btn;RETURN ("SELECTION":F$)
  157. 1570  IF Btn=0 THEN CONTROL @S;SET ("READ FILE":FNValid_name$(F$))
  158. 1580  RETURN
  159. 1590  !
  160. 1600 Cut: !
  161. 1610  CONTROL @S;SET ("CUT SELECTION":1)
  162. 1620  RETURN
  163. 1630  !
  164. 1640 Copytext: !
  165. 1650  CONTROL @S;SET ("COPY SELECTION":1)
  166. 1660  RETURN
  167. 1670  !
  168. 1680 Paste: !
  169. 1690  CONTROL @S;SET ("PASTE":1)
  170. 1700  RETURN
  171. 1710  !
  172. 1720 Replace: !
  173. 1730  CONTROL @S;SET ("DELETE SELECTION":1,"PASTE":1)
  174. 1740  RETURN
  175. 1750  !
  176. 1760 Findline: !
  177. 1770  S$="Go to what line?"
  178. 1780  T$="SHORT INTEGER"
  179. 1790  DIALOG "NUMBER",S$,Btn;SET ("FORMAT":T$),RETURN ("VALUE":N)
  180. 1800  IF Btn=0 THEN CONTROL @S;SET ("LINE NUMBER":N)
  181. 1810  RETURN
  182. 1820  !
  183. 1830 Findstr: !
  184. 1840  S$="Search for what text?"
  185. 1850  DIALOG "STRING",S$,Btn;RETURN ("VALUE":Search$)
  186. 1860  IF Btn=0 AND Search$<>"" THEN CONTROL @S;SET ("SEARCH":Search$)
  187. 1870  RETURN
  188. 1880  !
  189. 1890 Finis: !
  190. 1900  ASSIGN @Main TO *     ! Deletes PANEL widget
  191. 1910  CLEAR SCREEN
  192. 1920  END
  193. 1930  !
  194. 1940  DEF FNValid_name$(F$)
  195. 1950    INTEGER Colon_pos
  196. 1960    IF POS(SYSTEM$("VERSION:OS"),"HP-UX") THEN Colon_pos=POS(F$,":")
  197. 1970    IF NOT Colon_pos THEN Colon_pos=LEN(F$)+1
  198. 1980    RETURN F$[1,Colon_pos-1]
  199. 1990  FNEND
  200.